#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

inline int max(int a, int b)
{
   return (a > b) ? a : b;
}

inline double max(double a, double b)
{
    return (a > b) ? a : b;
}

inline string max(string a, string b)
{
    return (a > b) ? a : b;
}

inline int max(const vector<int> & vec)
{
    return *max_element(vec.begin(), vec.end());
}

inline double max(const vector<double> & vec)
{
    return *max_element(vec.begin(), vec.end());
}

inline string max(const vector<string> & vec)
{
    return *max_element(vec.begin(), vec.end());
}

inline int max(const int* array, int size)
{
    return *max_element(array, array + size);
}

int main()
{
    int a = 10,
        b = 12;
    double c = 10.0,
           d = 12.1;
    string e = "eda",
           f = "asa";
    int array[] = {5, 8, 45, 21, 4845};

    cout << max(a, b) << endl;
    cout << max(c, d) << endl;
    cout << max(e, f) << endl;
    cout << max(array, 5) << endl;
}
